﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using System.Runtime.Serialization;

namespace SCEM.DTO
{
    /// <summary>
    /// DTO de Histórico do Estoque
    /// </summary>
    [DataContract]
    public class HistoricoEstoqueDTO : IDTO<HistoricoEstoque>
    {

        [DataMember]
        public string Id { get; set; }

        [DataMember]
        public string NomeResponsavel { get; set; }

        [DataMember]
        public DateTime DataModificacao { get; set; }

        [DataMember]
        public Int32 QuantidadeAlterada { get; set; }

        //Produto
        [DataMember]
        public string IdProduto { get; set; }


        public HistoricoEstoque ConvertToEntity(ObjectContext context)
        {
            HistoricoEstoque historicoEstoque = new HistoricoEstoque();
            SCEMContainer scemContext = (SCEMContainer)context;
            Guid guid;

            // Verificar se o DTO representa uma entidade que já está persistida no banco e, em caso positivo, buscar ela no banco
            if (!String.IsNullOrEmpty(Id) && Guid.TryParse(Id, out guid))
            {
                var queryHistoricoEstoque = from h in scemContext.HistoricosEstoque
                                            where h.Id == guid
                                            select h;

                if (queryHistoricoEstoque.Count() == 1)
                    historicoEstoque = queryHistoricoEstoque.First();

            }

            // Tratar corretamente o caso de o DTO ser uma nova entidade a ser persistida no banco
            if (historicoEstoque.Id == Guid.Empty)
            {
                historicoEstoque.Id = Guid.NewGuid();
                historicoEstoque.DataModificacao = DateTime.Now;
            }

            // DTO -> Entidade
            historicoEstoque.NomeResponsavel = "responsavel"; //por enquanto não salva responsável.
            historicoEstoque.DataModificacao = DateTime.Now;
            historicoEstoque.QuantidadeAlterada = QuantidadeAlterada;

            //Tratar o relacionamento HistoricoEstoque <-> Produto
            if (!(historicoEstoque.Produto != null && historicoEstoque.Produto.Id != null && historicoEstoque.Produto.Id.ToString() == IdProduto) && Guid.TryParse(IdProduto, out guid))
            {
                var queryProduto = from p in scemContext.Produtos
                                   where p.Id == guid
                                   select p;
                if (queryProduto.Count() == 1)
                    historicoEstoque.Produto = queryProduto.First();

                //****RETIRAR DEPOIS esta linha - assim que tirar o produtoId do banco de Historico Estoque***//
                historicoEstoque.ProdutoId = guid;

            }

            return historicoEstoque;
        }
    }
}
